﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Collections;

namespace LCWMS
{
    public partial class  w_so068 : DockContent
    {
        DataSet dscustomer;
        DataSet ds_tran;
        Cursor currentCursor = Cursor.Current;

        public w_so068()
        {
            InitializeComponent();
            dgv_tran.AutoGenerateColumns = false;
        }



        //添加采购定单的合计行
        private void f_add_order()
        {
            //decimal d_1, d_2, d_3, d_4, d_5, d_6, d_7;
            //DataTable dt_put;
            ////增加一个合计行 
            //dt_put = (DataTable)dgv_tran.DataSource;
            //d_1 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["planqty"].ColumnName + ")", "true");
            //d_2 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["planamount"].ColumnName + ")", "true");
            //d_3 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["skuamount"].ColumnName + ")", "true");
            //d_4 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shouldqty"].ColumnName + ")", "true");
            //d_5 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["allocateqty"].ColumnName + ")", "true");
            //d_6 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["allocateamount"].ColumnName + ")", "true");
            //d_7 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shotqty"].ColumnName + ")", "true");
            //DataRow dr = dt_put.NewRow();
            //dr["barcode"] = "合计";
            //dr["planqty"] = d_1;
            //dr["planamount"] = d_2;
            //dr["skuamount"] = d_3;
            //dr["shouldqty"] = d_4;
            //dr["allocateqty"] = d_5;
            //dr["allocateamount"] = d_6;
            //dr["shotqty"] = d_7;
            //((DataTable)dgv_tran.DataSource).Rows.InsertAt(dr, ((DataTable)dgv_tran.DataSource).Rows.Count);
        }


        private void btn_Query_Click(object sender, EventArgs e)
        {

            lb_rows.Text = "总行数：0";

            // 设置为忙碌状态
            Cursor.Current = Cursors.WaitCursor;

            string str_sql = "" +

            " select " +
            " RTRIM(c.warehouse) warehouse,  " + // -- 部门编码
            " RTRIM(c.warehouse_name) warehouse_name, " + // -- 部门名称
            " RTRIM(a.location_code) location_code,  " + //--货位编码
            " RTRIM(ms.sku) sku, " + //
            " RTRIM(ms.sku_name) sku_name, " + //
            " RTRIM(ms.pack_code) pack_code, " + // -- 默认包装编码
            " RTRIM(ms.main_unit) main_unit, " + //
            " RTRIM(ms.shelflife_day) shelflife_day, " + // -- 保质期（天）
            " case ms.standby_3 when '10' then '正常' when'13' then '禁销'  when '20' then '预淘汰'  when '30' then '淘汰' when '0' then '新品' end standby_3, " + // -- 生命周期状态
            " RTRIM(ms.barcode) barcode,  " + //-- 条码
            " mp.qty02 box_spec , " + // -- 整件规格(箱规)
            " mp.unitsPerDelivery unitsPerDelivery,  " + //-- 配送规格
            " '1' 拣货规格,  " + //-- 拣货规格
            " ms.safe_storage , " + // -- 最小存量
            " ms.max_storage,  " + //-- 最大存量
            " d.stock_qty_m ,  " + //-- 货位现存数量（货位可用库存）
            " (d.stock_qty_m + d.ungot_qty_m - d.allocate_qty_m - d.freeze_qty_m) hwky_qty_m,  " + // --货位可用数量(库存+预收货-已分配-冻结)
            " '' 货位描述, " + // -- 货位描述
            " '' 允许多放量, " + // -- 允许多放量
            " '' 先入拣货位, " + // -- 先入拣货位(是)
            " '' 储位层数限制, " + // -- 储位层数限制
            " '' 绑定上层储位,  " + //-- 绑定上层储位
            " ms.putaway_rule,  " + //-- 上架规则
            " ms.allocate_rule,  " + //-- 分配规则
            " ms.sku_len , " + // -- 整件长
            " ms.sku_width , " + // -- 整件宽
            " ms.sku_heigth , " + // -- 整件高
            " mp.TI * mp.HI tpjs , " + // -- 托盘件数
            " mp.TI , " + // -- 每层件数
            " mp.HI ,  " + //-- 码盘层数
            " RTRIM(ms.memo) memo  " + //
            " from wms.mst_sku ms  " + //
            " left join wms.mst_location a on a.inv_org = ms.inv_org and a.location_code = ms.fix_location " + //
            " left join wms.mst_area b on a.inv_org = b.inv_org and a.area_code = b.area_code " + //
            " left join wms.mst_warehouse c on b.inv_org = c.inv_org and b.warehouse = c.warehouse " + //
            " left join wms.inv_sku_location d on a.inv_org = d.inv_org and a.location_code = d.location_code " + //
            " left join wms.mst_pack mp on mp.inv_org = ms.inv_org and mp.consignor = ms.consignor and mp.sku = ms.sku and mp.pack_code = ms.pack_code " + //
            " where 1=1 " +
            " and fix_flag='1' ";
            

            //string str_sql_where = "";
            //if (cb_consignor.Text.Trim() != "")
            //{
            //    str_sql_where = "and a.consignor = '" + cb_consignor.Text.Trim() + "' ";
            //}

            // 判断库区
            if (tb_warehouse.Text.Trim() != "")
            {
                str_sql = str_sql + "and c.warehouse = '" + tb_warehouse.Text.Trim() + "' ";
            }

            ////// 判断货位号
            ////if (tb_location_code.Text.Trim() != "")
            ////{
            ////    str_sql = str_sql + "and a.location_code = '" + tb_location_code.Text.Trim() + "' ";
            ////}

            // 判断货位号
            if (tb_location_code.Text.Trim() != "")
            {
                string[] skuList = tb_location_code.Text.Trim().Split(',');
                string skuWhere = "";
                if (skuList.Length > 0)
                {
                    foreach (string item in skuList)
                    {
                        if (skuWhere == "")
                        {
                            skuWhere = "'" + item + "'";
                        }
                        else
                        {
                            skuWhere += ",'" + item + "'";
                        }
                    }
                    str_sql = str_sql + " and a.location_code in (" + skuWhere + ")";
                }

            }

            //判断商品码
            if (tb_sku.Text.Trim() != "")
            {
                string[] skuList = tb_sku.Text.Trim().Split(',');
                string skuWhere = "";
                if (skuList.Length > 0)
                {
                    foreach (string item in skuList)
                    {
                        if (skuWhere == "")
                        {
                            skuWhere = "'" + item + "'";
                        }
                        else
                        {
                            skuWhere += ",'" + item + "'";
                        }
                    }
                    str_sql = str_sql + " and ms.sku in (" + skuWhere + ")";
                }

            }

            ////// 判断商品编码
            ////if (tb_sku.Text.Trim() != "")
            ////{
            ////    str_sql = str_sql + "and ms.sku = '" + tb_sku.Text.Trim() + "' ";
            ////}

            // 判断条形码
            if (tb_barcode.Text.Trim() != "")
            {
                str_sql = str_sql + "and ms.barcode = '" + tb_barcode.Text.Trim() + "' ";
            }



            //判断门店号

            str_sql += " order by c.warehouse,a.location_code ";
            try
            {
                if (main.dbtype == "SQL")
                {
                    ds_tran = main.dbservice.Sql_exec_selectsql(str_sql);
                }
                else
                {
                    ds_tran = main.dbservice.oracle_exec_selectsql(str_sql);
                }
                if (ds_tran.Tables[0].Rows.Count > 0)
                {
                    lb_rows.Text = "总行数：" + ds_tran.Tables[0].Rows.Count.ToString();
                    dgv_tran.DataSource = ds_tran.Tables[0];
                    //f_add_order();
                }
                else
                    dgv_tran.DataSource = null;
            }
            catch (System.Exception ee)
            {
                dgv_tran.DataSource = null;
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to Query", main.g_info_dataset) + "!" + ee.ToString());
            }
            Cursor.Current = currentCursor;
        }

        private void w_so064_Load(object sender, EventArgs e)
        {
            dscustomer = new DataSet();
            try
            {
                dscustomer = new DataSet();
                dscustomer = main.g_class.comm_get_consignor();
                cb_consignor.DataSource = dscustomer.Tables[0];
                cb_consignor.ValueMember = "consignor";
                cb_consignor.DisplayMember = "consignor";

                //语言转换
                main.g_class.comm_changeControl(this, main.g_win_dataset);
            }
            catch (System.Exception ee)
            {
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to initialize Information of transaction type", main.g_info_dataset) + "!" + ee.ToString());
                return;
            }

            //按钮权限控制
            string str_right;
            str_right = main.g_class.comm_getright("w_so068", main.g_right_dataset);


            //查询
            if (str_right.Substring(4, 1) == "0")
            {
                this.btn_Query.Visible = false;
            }

            else
            {
                this.btn_Query.Visible = true;
            }

            //导出ＥＸＣＥＬ
            if (str_right.Substring(5, 1) == "0")
            {
                this.btn_excel.Visible = false;
            }
            else
            {
                this.btn_excel.Visible = true;
            }
           
        }

       
        private void cb_consignor_TextChanged(object sender, EventArgs e)
        {
            string str_cust;
            str_cust = cb_consignor.Text.Trim();
            tb_cusname.Text = main.g_class.comm_findname(str_cust, dscustomer);
        }

     
        private void btn_excel_Click(object sender, EventArgs e)
        {
            if (dgv_tran.Rows.Count > 0)
            {
                main.g_class.DataGridViewToExcel(dgv_tran);
            }
        }


        //复制某一列值到剪贴板
        private void CopyColumnValueToClipboard(DataGridView dgv, int rowIndex, int columnIndex)
        {
            if (dgv.Rows.Count <= rowIndex || columnIndex < 0)
            {
                // 检查索引是否超出范围
                return;
            }

            string value = dgv.Rows[rowIndex].Cells[columnIndex].Value.ToString();
            if (value != null)
            {
                Clipboard.SetText(value);

                MessageBox.Show("已复制到剪贴板");
            }
        }

        private void dgv_tran_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int i_temp = dgv_tran.CurrentRow.Index;
            string str_name = dgv_tran.Columns[dgv_tran.CurrentCell.ColumnIndex].Name.ToString().Trim();
            //if (str_name == "so_no")
            {
                //如果你想复制第n行第1列的值：
                CopyColumnValueToClipboard(dgv_tran, i_temp, dgv_tran.CurrentCell.ColumnIndex);
            }
        }

        private void cbBox_push_TextChanged(object sender, EventArgs e)
        {
            //if (cbBox_push.Text.Trim() == "未推送")
            //{

            //    chkBox_bhday.Checked = false;
            //}
        }

        private void chkBox_bhday_CheckedChanged(object sender, EventArgs e)
        {
            //if (chkBox_bhday.Checked && cbBox_push.Text.Trim() == "未推送")
            //{
            //    cbBox_push.SelectedIndex = 0;
            
            //}
        }

        private void btn_q_location_code_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_location_code.Text = w_query_batch.str_qcontent;
        }

        private void btn_q_sku_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_sku.Text = w_query_batch.str_qcontent;
        }

        private void dgv_tran_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //自动编号，与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgv_tran.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
                  (e.RowIndex + 1).ToString(),
                   dgv_tran.RowHeadersDefaultCellStyle.Font,
                   rectangle,
                   dgv_tran.RowHeadersDefaultCellStyle.ForeColor,
                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        // 删除行
        private void dgv_tran_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenu m = new ContextMenu(); // 创建一个 ContextMenu
                MenuItem deleteRowItem = new MenuItem("删除行"); // 创建一个 MenuItem
                deleteRowItem.Click += dgv_tran_DeleteRowItem_Click; // 添加点击事件
                m.MenuItems.Add(deleteRowItem);

                int currentMouseOverRow = dgv_tran.HitTest(e.X, e.Y).RowIndex;   // 将 MenuItem 添加到 ContextMenu
                m.Show(dgv_tran, new Point(e.X, e.Y));                           // 显示 ContextMenu
            }
        }

        private void dgv_tran_DeleteRowItem_Click(object sender, EventArgs e)
        {

            w_dgv_deleterow wsingle = new w_dgv_deleterow();
            wsingle.ShowDialog();
            int i_row_start = w_dgv_deleterow.i_row_start - 1;
            int i_row_end = w_dgv_deleterow.i_row_end - 1;

            // 确保起始行和结束行在有效范围内
            if (i_row_start < 0) return;
            if (i_row_end >= dgv_tran.Rows.Count || i_row_start > i_row_end)
            {
                MessageBox.Show("超出有效范围！");
                return;
            }

            // 从 DataGridView 中删除指定范围的行 (从后向前删除行，避免索引变化问题)
            for (int i = i_row_end; i >= i_row_start; i--)
            {
                dgv_tran.Rows.RemoveAt(i);
            }

        }
    }
}